# -*- coding:utf-8 -*-

# 安装flask_wtf模块，使用wtf表单
# python -m pip install flask_wtf
from flask import Flask, render_template, request, flash

from flask_wtf import FlaskForm # flask表单类，自定义表单继承此类
from wtforms import StringField, PasswordField, SubmitField # wtf表单字段与html表单一一对应
from wtforms.validators import DataRequired, EqualTo, Length


# 解决中文编码问题，相当于自动在中文字符串前面加 u'你好'
# 设置编码后，不需要在编码中出现中文的地方前面加u
# import sys, importlib
# importlib.reload(sys)
# sys.setdefaultencoding('utf-8') # 该方法只在特定的版本中有

app = Flask(__name__)
# wtf的表单需要使用csrf防攻击，需要使用secret_key加密key
app.secret_key = 'abc'

class LoginForm(FlaskForm):
    # validator支持长度、必填、相等、数字、可选等校验，具体查看validators.py源码
    username = StringField(u'登录名：', validators=[DataRequired()])
    pwd = PasswordField(u'密码：', validators=[DataRequired()
        , Length(2, 3, 'pwd need 2-3 len')
        , EqualTo('username', 'pwd must equals to username')])
    submit = SubmitField(u'提交')

@app.route('/login', methods=['GET','POST'])
def login():
    frm = LoginForm()
    if request.method == 'POST':
        print(frm.username.data, frm.pwd.data) # 获取表单数据
        if frm.validate_on_submit(): # 验证表单
            return 'success'
        # else:
            # loginForm.errors
            # flash('failed')
    return render_template('wtf_form.html', loginForm=frm)


if __name__ == '__main__':
    app.run(debug=True)
